/**
 *  针对AliYun 设备管理API请求
 *  https://help.aliyun.com/document_detail/69893.html?spm=a2c4g.11186623.6.736.5fcd342dh5UEoS
 *
 *  @Date 2020-04-27
 **/

import { aliyunApi } from '../../utils/aliyunHttp.js';

const app = getApp();

let deviceApi = {

    /**
     * 在指定产品下注册设备
     *
     * @param {Object} param 请求参数
     * {
     *      DeviceName: xxxx,
     *      Nickname: xxxx
     * }
     **/
    registerDevice(param = {}) {
        let opts = {
            data: {
                ...param,
                Action: 'RegisterDevice',
                ProductKey: app.aliConfig.ProductKey,
            }
        };
        return aliyunApi.get(opts);
    },

    /**
     * 查询指定设备的详细信息
     *
     * @param {Object} param 请求参数
     * {
     *      IotId: xxxxx,
     * }
     **/
    queryDeviceDetail(param = {}) {
        let opts = {
            data: {
                ...param,
                Action: 'QueryDeviceDetail',
            }
        };
        return aliyunApi.get(opts);
    },

    /**
     * 批量查询设备详情。
     *
     * @param {Object} param 请求参数
     * {
     *      DeviceName: [
     *      ],
     * }
     **/
    batchQueryDeviceDetail(param = {}) {
        let opts = {
            data: {
                ...param,
                Action: 'BatchQueryDeviceDetail',
                ProductKey: app.aliConfig.ProductKey,
            }
        };
        return aliyunApi.get(opts);
    },

    /**
     * 查询指定产品下的所有设备列表,分页接口
     *
     * @param {Object} param 请求参数
     * {
     *      PageSize: xxxx,
     *      CurrentPage: xxxx
     * }
     **/
    queryDevice(param = {}) {
        let opts = {
            data: {
                ...param,
                Action: 'QueryDevice',
                ProductKey: app.aliConfig.ProductKey,
            }
        };
        return aliyunApi.get(opts);
    },

    /**
     * 删除指定设备
     *
     * @param {Object} param 请求参数
     * {
     *      IotId: xxxxx,
     * }
     **/
    deleteDevice(param = {}) {
        let opts = {
            data: {
                ...param,
                Action: 'DeleteDevice',
            }
        };
        return aliyunApi.get(opts);
    },

    /**
     * 查看指定设备的运行状态
     *
     * @param {Object} param 请求参数
     * {
     *      IotId: xxxxx,
     * }
     **/
    getDeviceStatus(param = {}) {
        let opts = {
            data: {
                ...param,
                Action: 'GetDeviceStatus',
            }
        };
        return aliyunApi.get(opts);
    },

    /**
     * 批量查看同一产品下指定设备的运行状态。
     *
     * @param {Object} param 请求参数
     * {
     *      IotId: [
     *      ],
     * }
     **/
    batchGetDeviceState(param = {}) {
        let opts = {
            data: {
                ...param,
                Action: 'BatchGetDeviceState',
                ProductKey: app.aliConfig.ProductKey,
            }
        };
        return aliyunApi.get(opts);
    },

    /**
     * 禁用指定设备
     *
     * @param {Object} param 请求参数
     * {
     *      IotId: xxxxxx,
     * }
     **/
    disableThing(param = {}) {
        let opts = {
            data: {
                ...param,
                Action: 'DisableThing',
            }
        };
        return aliyunApi.get(opts);
    },

    /**
     * 解除指定设备的禁用状态，即启用被禁用的设备
     *
     * @param {Object} param 请求参数
     * {
     *      IotId: xxxxxx,
     * }
     **/
    enableThing(param = {}) {
        let opts = {
            data: {
                ...param,
                Action: 'EnableThing',
            }
        };
        return aliyunApi.get(opts);
    },

    /**
     * 查询指定设备的属性记录
     *
     * @param {Object} param 请求参数
     * {
     *      Identifier: xxxxxx,
     *      PageSize: xxxxx,
     *      IotId: xxxxx
     * }
     **/
    queryDevicePropertyData(param = {}) {
        let opts = {
            data: {
                ...param,
                Asc: 0,
                EndTime: new Date().getTime() + '',
                StartTime: '',// 要转成上线那天的时间
                Action: 'QueryDevicePropertyData',
            }
        };
        return aliyunApi.get(opts);
    },

    /**
     * 调用该接口批量修改设备备注名称
     *
     * @param {Object} param 请求参数
     * {
     *      DeviceNicknameInfo.N.IotId: xxxxx,
     *      DeviceNicknameInfo.N.Nickname: xxxxx
     * }
     **/
    updateDeviceNickname(param = {}) {
        let opts = {
            data: {
                ...param,
                Action: 'BatchUpdateDeviceNickname',
            }
        };
        return aliyunApi.get(opts);
    },

    /**
     * 调用该接口为指定设备设置属性值
     *
     * @param {Object} param 请求参数
     * {
     *      IotId: xxxxx,
     *      Items: xxxxx
     * }
     **/
    setDeviceProperty(param = {}) {
        let opts = {
            data: {
                ...param,
                Action: 'SetDeviceProperty',
            }
        };
        return aliyunApi.get(opts);
    },


};

export { deviceApi };
